Random number generators produce sequences of numbers in which a number cannot be predicted from the previous numbers in the sequence. Important qualities of a sequence of random numbers are that there is no repetition, a good numeric distribution and a lack of predictability. Random number generators are used in many different applications including security systems (e.g. for encryption purposes) and sampling applications (e.g. opinion polls) and in casinos.
Existing random number generators are implemented in either hardware or software. Hardware random number generators typically generate random numbers from a physical process such as radioactive decay of atoms detected by a Geiger counter or atmospheric noise detected by a radio receiver. These physical processes are, in theory, completely unpredictable and so a sequence of numbers generated by monitoring such a physical process should be random. However, it is not always convenient for a piece of equipment that requires random number generation to have to be placed near a physical process, such as radioactive decay, in order to monitor that process. Also, the monitoring equipment can tend to be bulky, which makes it unsuitable for space limited applications.
Most random number generators are not hardware devices, but are algorithms implemented by software routines. These are often called pseudo-random number generators as they cannot be truly random. This is because the algorithms that generate the random sequence typically use previously generated numbers to generate subsequent numbers in the sequence. Therefore, given the original state of the generator, and the specific algorithm, the sequence generated by such a random number generator is predictable. Even if only part of this information is known, it can render the random number generator insecure for security applications.